﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Data;

namespace FormProcessoPadrao
{
    public partial class FormProcessoPadrao : Form
    {

        protected List<string> campos;
        protected List<Object> values;

        public FormProcessoPadrao()
        {
            InitializeComponent();
        }

        private void FormProcessoPadrao_Load(object sender, EventArgs e)
        {

        }
            
        public virtual bool dadosValidos()
        {
            return true;
        }

        private void btnProximo_Click(object sender, EventArgs e)
        {
            if (this.dadosValidos())
            {
                if (pnlInicio.Visible)
                {
                    pnlInicio.Visible = false;
                    tbcntrlEtapas.Visible = true;
                    btnAnterior.Enabled = true;
                }
                else if (tbcntrlEtapas.SelectedIndex == tbcntrlEtapas.TabCount - 1)
                {
                    pnlFimProcesso.Visible = true;
                    tbcntrlEtapas.Visible = false;
                    btnProximo.Enabled = false;
                    btnCancelar.Text = "Concluir";
                }
                else
                {
                    tbcntrlEtapas.SelectedIndex += 1;
                }
            }
        }

        private void btnAnterior_Click(object sender, EventArgs e)
        {
            if (pnlFimProcesso.Visible)
            {
                pnlFimProcesso.Visible = false;
                tbcntrlEtapas.Visible = true;
                btnProximo.Enabled = true;
                btnCancelar.Text = "Cancelar";
            }
            else if (tbcntrlEtapas.SelectedIndex == 0)
            {
                tbcntrlEtapas.Visible = false;
                pnlInicio.Visible = true;
                btnAnterior.Enabled = false;
            }            
            else
            {
                tbcntrlEtapas.SelectedIndex -= 1;
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (btnCancelar.Text.Equals("Concluir"))
            {
                if (btnAnterior.Enabled)
                {
                    if (metodo())
                    {
                        FormExecutaProcesso FormExecutaProcesso = new FormExecutaProcesso();
                        FormExecutaProcesso.ShowDialog();
                        lblTextoFimProcesso1.Text = "Processo executado com sucesso!";
                        lblTextoFimProcesso2.Text = "Pressione 'Concluir' para sair.";
                        btnAnterior.Enabled = false;
                        btnProximo.Enabled = false;
                    }
                    
                }
                else
                {
                    this.Close();
                }
            }
            else
            {
                this.Close();
            }

        }

        private void FormProcessoPadrao_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult retorno;
            if (btnCancelar.Text.Equals("Cancelar"))
            {
                retorno = MessageBox.Show("Deseja realmente cancelar o processo?", "Cancelando Processo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (retorno == System.Windows.Forms.DialogResult.No)
                {
                    e.Cancel = true;
                }
            }
            //e.Cancel = Sair();
        }

        public void insereTextoProcesso(string processo)
        {
            lblTextoInicioProcesso1.Text = "Iniciando o processo " + processo;
            lblTextoFimProcesso1.Text = "Preparação do processo " + processo + " concluida com êxito.";
        }

        public void loadCombos(string tabela, string codigo, ComboBox combo,bool temSituacao = true)
        {
            DataTable dados;
            if (temSituacao)
            {
               dados = Conexao.getInstance.executeQuery(SqlCrud.getInstance.select(tabela, "Situacao = 1"));
            }
            else
            {
                dados = Conexao.getInstance.executeQuery(SqlCrud.getInstance.selectAll(tabela));
            }
            combo.DataSource = dados;
            combo.DisplayMember = "Nome";
            combo.ValueMember = codigo;
        }

        public virtual bool metodo()
        {
            return true;
        }

        public void insert(string tabela, List<string> campos, List<object> values)
        {
            string sql = "";
            try
            {
                sql = SqlCrud.getInstance.insert(tabela, campos, values);
                Conexao.getInstance.execute(sql);
            }
            catch (Exception e)
            {
                MessageBox.Show("Não foi possível concluir o processo!\n\nERRO: " + e.Message + "\n\nSQL: " + sql, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void update(string tabela, List<string> alteracoes, string PK, Object id)
        {
            string sql = "";
            try
            {
                sql = SqlCrud.getInstance.updateById(tabela, alteracoes, PK, id);
                Conexao.getInstance.execute(sql);
            }
            catch (Exception e)
            {
                MessageBox.Show("Não foi possível concluir o processo!\n\nERRO: " + e.Message + "\n\nSQL: " + sql, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void FormProcessoPadrao_Shown(object sender, EventArgs e)
        {
            if (campos != null)
            {
                pnlFimProcesso.Visible = false;
                tbcntrlEtapas.Visible = false;
                pnlFimProcesso.Dock = DockStyle.Fill;
                pnlInicio.Dock = DockStyle.Fill;
            }
        }
    }
}
